package com.example.kotlinstudy.s0

import java.io.File

//https://www.bilibili.com/video/BV1wf4y1s7TG?p=91&spm_id_from=pageDriver
object ApplicationConfig {  //1 object可做为对象的申明 就是一个单例
    init {
        println("ApplicationConfig loading ....")
    }

    fun doSomething() {
        println("dosomething")
    }
}

open class Player {
    open fun load() = "loading nothing.."
}

class ConfigMap {
    //3 伴生对象的关键字  ,一个类只有一个伴生对象,并且在使用的时候才会去实例化
    companion object {
        private const val PATH = "xxx"
        fun load()= File(PATH).readBytes()
    }
}

fun main() {
    //ApplicationConfig 类名就是对象名
    ApplicationConfig.doSomething()

    //2 object 用于对象表达式 ，相当于java中的匿名内部类
    val p = object : Player() {
        override fun load() = "anyonymous nothings .."
    }
    println(p.load())

    //3  只有实例化了 这个类，或者调用了里面的方法，伴生对象对会载入
    // 不管实例化多次，伴生对象在内存中只有一份
    ConfigMap()
    ConfigMap.load()
}